/**
 * Created by Jack Xue on 20101120
 */
package org.code.jack.jweberp.core;

import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;

import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.code.jack.jweberp.dao.IPOLoadDao;

/**
 *对于一些关联对象,我们在表单中只能存放关联对象的id,而在赋值的时候需要通过这个id从业务(或持久)层中加载这个对象.然后设置到指定的属性中,此时可以使用POLoad标签,用它可以处理成自动关联.
 * 
 */
// 注解可应用于哪些目标对象上
@Target( { FIELD, METHOD, CONSTRUCTOR })
// 让保持性策略为运行时态，即将注解编码到class文件中，让虚拟机读取
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface POLoad {

	/**
	 * 指定属性主表单属性名称，默认值为属性的名称，比如加载dir。 如果在表单中该属性的名称换成其它值，如dirId，则需要在标签中注名@POLoad(name="dirId")
	 * 
	 * @return 返回要加载的对象主键在表单中的名称
	 */
	String name() default "";

	/**
	 * 指定实体主键的类型，默认值为Long。
	 * 
	 * @return 加载对象的主键类型
	 */
	@SuppressWarnings("rawtypes")
	Class getIdType() default Long.class;

	/**
	 * 指定加载器，默认为POLoadDao的实现 在实际加载的过程中，是通这个POLoadDao来进行对象加载。
	 * 
	 * @return 返回我写的加载器，默认为POLoadDao这个接口
	 */
	@SuppressWarnings("rawtypes")
	Class loadDao() default IPOLoadDao.class;
}
